/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package beans;

import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

import javax.faces.model.SelectItem;

import negocio.FabricaNegocio;
import negocio.NegocioException;
import seguranca.Interfaces.IQuarto;
import utilitarios.Bean;
import base.ListaDetalhe;
import daos.QuartoDAO;
import entidades.Quarto;

/**
 *
 * @author renan
 */
public class QuartoFrm extends ListaDetalhe<IQuarto> {
    private final String LISTA = "quarto";
    private final String DETALHE = "quartoDetalhe";
    private SelectItem[] situacao;
    private String situacaoSelecionada;
    public  static ArrayList<QuartoDAO> colecaoQuartos = new ArrayList<QuartoDAO>();
    IQuarto quarto;

    public QuartoFrm() {
        quarto = FabricaNegocio.getQuarto();
        situacao = new SelectItem[]{
                    new SelectItem("", ""),
                    new SelectItem("1", "VAGO"),
                    new SelectItem("2", "OCUPADO")
                };
    }

    public void entrar() {
        situacaoSelecionada = "";
        acao = Acao.INSERIR;
        limpar();
    }

    public void gravar() {
        try {
            if (acao == Acao.INSERIR) {
                quarto.inserir();
            } else if (acao == Acao.ALTERAR) {
                quarto.alterar();
            }
            limpar();
        } catch (NegocioException ex) {
            imprimirErrosPagina(ex);
        } catch (FileNotFoundException ex) {
            imprimirErrosPagina(ex + "");
        }catch (IOException ex) {
            imprimirErrosPagina(ex + "");
        }
    }

    public String alterar() {
        acao = Acao.ALTERAR;
        IQuarto item = (IQuarto) getObjetoRequest("item");
        Bean.copiarPropriedades(quarto, item);
        return DETALHE;
    }

    public void remover() {
        IQuarto item = (IQuarto) getObjetoRequest("item");
        Bean.copiarPropriedades(quarto, item);
        try {
            quarto.deletar();
            colecao.remove(item);
        } catch (NegocioException ex) {
            imprimirErrosPagina(ex);
        }
    }

    public void pesquisar() {
        List<Quarto> col;
        colecao.clear();
        try {
            col = quarto.pesquisar(situacaoSelecionada);
            for (int i = 0; i < col.size(); i++) {
                QuartoDAO q = new QuartoDAO();
                q.setQuarto(col.get(i));
                colecao.add(q);
            }
        } catch (NegocioException ex) {
            imprimirErrosPagina(ex);
        }

    }

    public void pesquisarSemProxy(){
        List<Quarto> col;
        colecaoQuartos.clear();
        try {
            col = quarto.pesquisarSemProxy(situacaoSelecionada);
            for (int i = 0; i < col.size(); i++) {
                QuartoDAO q = new QuartoDAO();
                q.setQuarto(col.get(i));
                colecaoQuartos.add(q);
            }
        } catch (NegocioException ex) {
            imprimirErrosPagina(ex);
        }
    }


    public void sort(final String column, final boolean order) {
        Comparator<IQuarto> comparator = new Comparator<IQuarto>() {

            public int compare(IQuarto d1, IQuarto d2) {
                if (column == null) {
                    return 0;
                }
                if (column.equals("ncamas")) {
                    return order ? d1.getQuarto().getnCamas().compareTo(d2.getQuarto().getnCamas())
                            : d2.getQuarto().getnCamas().compareTo(d1.getQuarto().getnCamas());
                } else if (column.equals("diaria")) {
                    return order ? d1.getQuarto().getValorDiaria().compareTo(d2.getQuarto().getValorDiaria())
                            : d2.getQuarto().getValorDiaria().compareTo(d1.getQuarto().getValorDiaria());
                } else {
                    return 0;
                }
            }
        };
        Collections.sort(colecao, comparator);
    }

    public String cadastrar() {
        return DETALHE;
    }

    public String fechar() {
        return LISTA;
    }

    public void limpar() {
        quarto.limpar();
        colecao.clear();
    }

    public IQuarto getQuarto() {
        return quarto;
    }

    public void setQuarto(IQuarto quarto) {
        this.quarto = quarto;
    }

    public SelectItem[] getSituacao() {
        return situacao;
    }

    public void setSituacao(SelectItem[] situacao) {
        this.situacao = situacao;
    }

    public String getSituacaoSelecionada() {
        return situacaoSelecionada;
    }

    public void setSituacaoSelecionada(String situacaoSelecionada) {
        this.situacaoSelecionada = situacaoSelecionada;
    }

    public static ArrayList<QuartoDAO> getColecaoQuartos() {
        return colecaoQuartos;
    }

    public static void setColecaoQuartos(ArrayList<QuartoDAO> colecaoQuartos) {
        QuartoFrm.colecaoQuartos = colecaoQuartos;
    }  
}
